iT邦幫忙

2026 iThome 鐵人賽

DAY 22
0
IT Operation

AWS 架構為什麼這樣選?30 天拆解服務選型與設計取捨系列 第 22 篇

Day 22|容器上 AWS:ECS、EKS 與 Fargate 怎麼選?

  • 分享至 

  • xImage
  •  

上一篇比較了 EC2、Container 與 Lambda,當應用程式已經打包成容器映像檔(Container Image),下一個問題我們來看看:到底該用 ECS、EKS,還是 Fargate?

這三個服務常被放在一起比較,但其實不是同一層的選項。

可以先拆成兩個問題:

誰負責管理 Container?
│
├── ECS
└── EKS

Container 跑在哪裡?
│
├── EC2
└── Fargate

也就是:先選容器編排平台(Container Orchestration),再選底層運算資源。


ECS 與 EKS:負責管理 Container

Container 數量一多,就會遇到:

  • Container 掛掉後誰補上?
  • 流量增加時誰增加副本?
  • 新版本怎麼逐步更新?
  • Container 要被安排到哪個運算資源?

這些事情就是 容器編排(Container Orchestration) 要處理的。

AWS 上常見的選擇就是 ECS 與 EKS。

ECS:用 Task 與 Service 管理應用程式

Amazon ECS 是 AWS 原生的容器編排服務。

ECS 常見三個概念:

名詞 用途
Task Definition(任務定義) 描述映像檔、CPU、記憶體、Port 等執行設定
Task(任務) 根據 Task Definition 啟動的執行單位,可包含一個或多個容器
Service(服務) 維持指定數量的 Task 持續執行

例如:

ECS Service
Desired Count = 3
      │
      ├── Task A
      ├── Task B
      └── Task C

如果 Task B 停止,ECS Service 會再啟動新的 Task,讓數量回到 3。

因此:

  • 長時間提供服務的 API,可以由 ECS Service 管理。
  • 做完就結束的批次工作,可以執行獨立任務(Standalone Task)。

如果系統主要部署在 AWS,團隊只是需要管理 Container、接 ALB、自動擴展,而且沒有 Kubernetes 相依需求,就可以優先評估 ECS。


EKS:什麼需求值得引入 Kubernetes?

Amazon EKS 是 AWS 提供的受管 Kubernetes 服務。

如果團隊已經具備 Kubernetes 維運經驗,並且現有部署流程依賴 Helm Chart、Operator 或 Kubernetes API,使用 EKS 就能延續既有工具與管理方式。

如果公司也要求不同環境採用一致的 Kubernetes 平台標準,這會是選擇 EKS 的另一個理由。

補充說明

  • Helm Chart:將 Kubernetes 的部署設定整理成可重複使用的套件,透過範本與參數,讓同一套應用程式能以不同設定部署到開發、測試或正式環境。
  • Operator:將特定軟體的維運知識寫成程式,持續監看狀態並自動執行管理工作,例如安裝、升級或備份;實際支援哪些功能,取決於該 Operator 的實作。
  • Kubernetes API 相依:應用程式或平台需要透過 Kubernetes API 查詢或管理資源,例如動態建立 Pod、調整 Deployment。這些功能依賴 Kubernetes,換到其他容器平台時就需要調整。

例如原本已有:

On-Premises Kubernetes
│
├── Helm
├── Operator
└── Deployment YAML

搬到 AWS 後繼續使用 EKS,就能延續原有的 Kubernetes 操作方式。

但如果團隊只有 Docker Image 與幾個 API,沒有 Kubernetes 經驗,若未經準備直接使用 EKS,反而可能會造成運維負擔,而且 ECS 一樣可以管理大量 Container。

另外,EKS 雖然由 AWS 管理 Kubernetes 控制平面(Control Plane),但 RBAC、Deployment、網路設定、附加元件(Add-on)與版本升級等 Kubernetes 工作,仍然需要團隊處理。

所以欲使用 EKS 的話,請慎重評估 團隊是不是真的需要 Kubernetes?


Fargate:不是 Orchestrator,而是 Compute

接著看最容易混淆的 Fargate。

Fargate 不負責 Container 編排,它負責提供 Container 執行時需要的運算資源。

例如 ECS 可以搭配:

ECS
│
├── EC2
└── Fargate

EKS 也可以搭配不同的 Compute 模式。

所以這邊來回應一下標題的問題,真正要比較的是 ECS vs EKS,以及 EC2 vs Fargate,而不是把 ECS、EKS、Fargate 當成三選一。


EC2 與 Fargate 怎麼選?

如果 Container 跑在 EC2,團隊可以自己控制:

  • 執行個體類型(Instance Type)
  • GPU
  • 作業系統
  • 特殊 Agent 或主機設定

也可以把多個 Container 安排到同一批 EC2 上,提高資源利用率。

但同時也要管理:

  • 作業系統更新與修補
  • EC2 執行個體替換
  • 容量規劃(Capacity Planning)
  • EC2 自動擴展(Auto Scaling)

Fargate 則把底層主機管理交給 AWS。

團隊仍然需要負責:

  • 容器映像檔(Container Image)
  • CPU 與記憶體配置
  • IAM 權限
  • 網路設定
  • 日誌紀錄
  • 擴展策略(Scaling Policy)

但不需要自己維護承載 Container 的 EC2。

因此,如果沒有 GPU、特殊主機設定等需求,而且希望減少 Server 維護,Fargate 通常會是很自然的選擇。

反過來,如果需要 GPU、特權容器(Privileged Container)、特定主機能力,或已經有成熟的 EC2 維運流程,就可以考慮使用 EC2 型運算資源。


擴展 Container,不代表底層容量一定足夠

假設 ECS Service 從 2 Tasks 擴展成 6 Tasks,如果底層使用 EC2,還要確認目前的 EC2 Capacity 是否放得下新增的 Task。

所以其實有兩層擴展:

應用程式擴展(Application Scaling)
Task 2 → 6
      │
      ▼
運算容量擴展(Compute Scaling)
底層 Capacity 是否足夠?

Fargate 可以減少這一層主機容量管理,但仍要注意服務配額(Service Quota)、子網路可用 IP 與下游資料庫或其他服務的承載能力。


實際選型可以怎麼判斷?

假設一個新系統有:

  • 3 個容器化 API
  • 1 個每日批次工作
  • 全部部署在 AWS
  • 團隊熟悉 Docker
  • 沒有 Kubernetes 經驗
  • 沒有特殊的主機層需求
  • 沒有既有的 EC2 容器叢集,希望減少主機維護。

可以優先評估看看:ECS + Fargate

API 使用 ECS Service,批次工作使用獨立任務(Standalone Task)。

選 ECS,是因為目前沒有 Kubernetes 相依需求。

選 Fargate,是因為這是新環境,沒有特殊主機需求,也希望減少主機維護;後續仍要透過負載測試,確認資源配置與執行成本是否符合預算。

如果團隊已有成熟的 EC2 維運流程,或能讓一批主機長期維持良好的使用率,就應把 ECS + EC2 一起比較。

可以把整個判斷流程整理成:

現有條件 優先評估
新環境、没有特殊主機需求,希望減少主機維護 ECS + Fargate
已有成熟的 EC2 更新、監控與容量管理流程 ECS + EC2
需要 EC2 的彈性,也希望減少部分主機管理 ECS Managed Instances
已有 Kubernetes 平台規範與管理能力 EKS,再選擇適合的運算模式

最後初步就先記得:

  • ECS、EKS 解決的是 Container 怎麼被管理。
  • Fargate 解決的是 Container 在哪裡取得運算資源。

把這兩層拆開之後,ECS、EKS 與 Fargate 的選擇就會清楚很多。


下一篇

當 Application 處理一筆 Request 時,如果還要寄信、更新庫存、通知物流,這些工作一定要全部同步完成嗎?

下一篇會進入 SQS、SNS 與 EventBridge,看看佇列(Queue)、發布/訂閱(Pub/Sub)與事件路由(Event Routing)分別適合什麼情境。

參考資料


上一篇
Day 21|應用程式該放 EC2、容器還是 Lambda?
下一篇
Day 23|每個請求都要同步完成嗎?SQS、SNS 與 EventBridge 怎麼選?
系列文
AWS 架構為什麼這樣選?30 天拆解服務選型與設計取捨 共 23 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言